﻿// Ball Aizu - 0033.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <cstring>

using namespace std;

//https://vjudge.csgrandeur.cn/problem/Aizu-0033
/*
如图所示，一个容器被分成两半：10 个编号为 1 到 10 的小球从容器的开口 A 投下，被放入左边的圆柱体 B 或右边的圆柱体 C 中。 
板 D 可以围绕支点 E 向左或向右旋转。通过移动板 D，您可以决定将球放入圆筒 B 还是圆筒 C。

给你一串球，让它们通过孔 A 落到圆筒 B 或圆筒 C 中。 它们依次被放入圆柱体 B 或圆柱体 C。 
如果圆筒 B 和圆筒 C 都能将较大的小球放在较小的小球上，程序应输出 "是"；如果不能，则输出 "否"。 
但是，不可能调换容器中球的顺序。 此外，还假定这些球可以连续放在同一个圆筒中，并且圆筒 B 和圆筒 C 中都有足够的空间放置所有 10 个球。

输入。
输入多个数据集：第一行输入数据集的数量 N。 然后给出 N 行数据集。 每个数据集从左至右依次给出 10 个数字，用空格隔开。

输出。
对于每个数据集，在一行中输出 "是 "或 "否"。


Sample Input
2
3 1 4 2 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
Output for the Sample Input
YES
NO

*/

const int N = 10;
int A[N];
int B[N];
int C[N];
int t,bidx,cidx;

bool dfs(int curr) {
	if (curr == 10) {
		return true;
	}

	int v = A[curr];
	//尝试方B或者放C
	if (bidx == 0 || v > B[bidx-1]) {
		B[bidx++] = v;
		if (dfs(curr + 1)) { return true; }
		bidx--;
	}

	if (cidx == 0 || v > C[cidx-1]) {
		C[cidx++] = v;
		if (dfs(curr + 1)) { return true; }
		cidx--;
	}

	return false;
}


int main()
{
	cin >> t;
	while (t--) {
		for (int i = 0; i < 10; i++) {
			cin >> A[i];
		}
		bidx = 0; cidx = 0;
		if (dfs(0)) { cout << "YES" << endl; }
		else { cout << "NO" << endl; }
	}

	return 0;
}

 